package cn.biplam.back.services.config;

import cn.biplam.back.jda.Jda;
import cn.biplam.back.sql.dml.Update;
import cn.biplam.common.bean.sqlengine.Sql;
import cn.biplam.common.client.DbResource;
import cn.biplam.common.struc.SysStruc;
import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.common.wrapper.sqlresult.SqlResult;


/**
 * 系统参数配置数据操作
 * @author 	WangSong 2009-3-9 下午04:38:22
 * @version 1.0
 */
public class ConfigData {

	/**
	 * 根据参数类型ID取参数		
	 * @param 	id  参数类型唯一标识
	 * @return	SqlResult
	 */
	public SqlResult getConfigAll() throws ErrorMessage {
		
		SqlResult sr = null;
		try {
			//初始化数据源信息
			DbResource mDbResource = new DbResource(DbResource.CONFIG);
			//初始化数据库操作对象
			Jda mJda = new Jda(mDbResource);
			StringBuffer sql = new StringBuffer();
			
			sql.append("select param_id,Apply_Value from sys_param");
			//初始化sql操作类
			Sql mSql = new Sql(sql.toString());
			//执行查询
			sr = mJda.executeSelect(mSql);
		} catch (Exception e) {
			throw new ErrorMessage(e);
		}
		return sr;
	}
	
	
	
	
	//TODO 以下功能都要转移到operator层实现
	/**系统如果分布部署的话，各分布服务器上的config数据源指向的是远程服务器,并且考虑到安全，用户可能是只读用户
	 * 而参数服务器上则可以修改配置参数，但是通过RT数据源访问的
	 * 所以 参数的修改维护也是走operator层
	 * */
	
	
	
	
	
	/**
	 * 根据参数配置id取参数配置对象		
	 * @param 	sConfigName  参数名称
	 * @return  SqlResult
	 */
	public SqlResult getConfigByConfigName(String sConfigName) throws ErrorMessage {
		
		SqlResult sr = null;
		try {
			//初始化数据源信息
			DbResource mDbResource = new DbResource(DbResource.CONFIG);
			//初始化数据库操作对象
			Jda mJda = new Jda(mDbResource);
			
			StringBuffer sql = new StringBuffer();
			sql.append(" select t.param_id,t.param_name,       ");
			sql.append("        t.default_value,t.apply_value,t.szfy_id ");
			sql.append("   from sys_param t                              ");
			sql.append("  where t.param_name = '" + sConfigName + "'   ");
			
			//初始化sql操作类
			Sql mSql = new Sql(sql.toString());
			//执行查询
			sr = mJda.executeSelect(mSql);
		} catch (Exception e) {
			throw new ErrorMessage(e);
		}
		return sr;
	}
	
	/**
	 * 更新参数配置信息
	 * 需要更新，取参数时直接通过jda，但写入及修改要走标准的operator层	
	 * @return	boolean
	 */
	@Deprecated
	public boolean updateConfig() throws ErrorMessage {
		
		boolean boo = false;
		try {
			//初始化数据源信息
			DbResource mDbResource = new DbResource(DbResource.CONFIG);
			//初始化数据库操作对象
			Jda mJda = new Jda(mDbResource);
			
			Update sql = new Update(this.TABLE_NAME);
			sql.putStringFieldIgnoreNullAndIgnoreEmpty(SysStruc.SysParam.Param_ID, this.sParamName);
			sql.putStringFieldIgnoreNullAndIgnoreEmpty(SysStruc.SysParam.Default_Value, this.sDefaultValue);
			sql.putStringFieldIgnoreNullAndIgnoreEmpty(SysStruc.SysParam.Apply_Value, this.sApplyValue);
			sql.putStringFieldIgnoreNullAndIgnoreEmpty(SysStruc.SysParam.Param_Type_Id, this.sParamTypeId);
			sql.setWhere("where t.id'= "+this.sId+"'");
			
			//初始化sql操作类
			Sql mSql = new Sql(sql.toString());
			//执行update
			mJda.executeDML(mSql);
		} catch (Exception e) {
			throw new ErrorMessage(e);
		}
		return boo;
	}
	
	/**
	 * 插入参数配置信息	
	 * @return	boolean
	 */
	@Deprecated
	public boolean insertConfig() throws ErrorMessage {
		boolean boo = false;
		return boo;
	}
	
	/**
	 * (update和insert前)设置配置参数
	 * @param iId  唯一标识
	 * @param sParamName  配置名
	 * @param sParamDesc  配置描述
	 * @param sDefaultValue  默认值
	 * @param sApplyValue   应用值
	 * @param iSzfyId      自增id
	 */
	@Deprecated
	public void setKvConfig(String sId,String sParamName,String sParamDesc,String sDefaultValue,
			                String sApplyValue,int iSzfyId ){
		this.sId = sId;
		this.sParamName = sParamName;
		this.sDefaultValue = sDefaultValue;
		this.sApplyValue = sApplyValue;
	}
	
	private final String TABLE_NAME="SYS_PARAM";
	private String sId;			//唯一标识
	private String sParamName;  	//参数名称
	private String sDefaultValue;	//参数默认值
	private String sApplyValue;		//参数应用值
	private String sParamTypeId;
}
